Detrend Price göstergesi hareketli bir ortalamaya benzer, daha kolay tanımlamak için fiyatlardaki eğilimleri filtreler.
Gösterge, bir trenddeki döngüleri tanımlama girişimidir.
yatay düz bir çizgi olarak hareketli bir ortalama çizerek ve
fiyatların bir a ile ilişkilerine göre hat boyunca yerleştirilmesi
hareketli ortalama. Altta yatan tanımlamanın bir yolunu sağlar.
hareketli ortalama bir aralık içinde görüntülendiğinde belirgin olmayan döngüler
fiyat tablosu. Uzunluktan daha uzun süreli döngüler (sayı
Detrend Fiyat Osc'sini hesaplamak için kullanılan çubukların sayısı) etkin bir şekilde
osilatör tarafından filtrelenir veya çıkarılır.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using Matriks.Data.Identifiers;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
/*
DPO DetrendPriceOsilatör
Prime
a:=20;
b:=a/2+1;
REF(C,-b)-MOV(C,a,S)
*/
namespace Matriks.Lean.Algotrader
{
//Ilk parametre indikatörün adı, sınıfın adıyla aynı olmalıdır.
//Ikinci parametre indikatörün Dataserisinin üzerine mi yeni pencereye mi ekleneceğini belirtir. Yeni pencere için ->IndicatorDrawingArea.NewWindow , Data Serisi için IndicatorDrawingArea.OnDataSeries
[IndicatorInformationAttribute("DPOKripex", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"DPOKripex(0)"
})]
public class DPOKripex : MatriksIndicator
{
[DefaultValue(20)]
public int Period
{
get; set;
}
[DefaultValue(MovMethod.S)]
public MovMethod MovMethod
{
get; set;
}
[DefaultValue(true)]
public bool OrtalanmisMI
{
get; set;
}
MOV mov;
public sealed override void OnInit()
{
mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, MovMethod);
}
int b;
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
var bardatamodel = GetBarData();
b = (int) Period / 2 + 1;
if (currentBar < Period)
{
SetLine(0, currentBar, 0);
return ;
}
if (!Instrument.SymbolBarData.Close.ContainsKey(currentBar - b))
{
SetLine(0, currentBar, 0);
}else
{
//dpo = isCentered ? close[barsback] - ma : close - ma[barsback]
if (OrtalanmisMI)
{
SetLine(0, currentBar, (Instrument.SymbolBarData.Close[currentBar - b] - mov.CurrentValue));
}else
{
SetLine(0, currentBar, (Instrument.SymbolBarData.Close[currentBar] - Ref(mov, b)));
}
}
}
}
}